// import { InputProps, ElSelect, SwitchProps, TimePickerDefaultProps } from "element-plus";
import { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults';
// import { TimeSelectProps } from "element-plus/es/components/time-select/src/time-select";
import { BreakPoint, Responsive } from '@/components/Grid/interface';
import {
	Cascader,
	EnumProps,
	Input,
	Select,
	TreeSelect,
	DatePicker,
	TimeSelect,
	Switch,
	TimePicker,
	RadioGroup
} from '@/components/FormBox/interface/index';
// export interface EnumProps {
// 	label: string; // 选项框显示的文字
// 	value: any; // 选项框值
// 	disabled?: boolean; // 是否禁用此选项
// 	tagType?: string; // 当 tag 为 true 时，此选择会指定 tag 显示类型
// 	children?: EnumProps[]; // 为树形选择时，可以通过 children 属性指定子选项
// 	[key: string]: any;
// }

export type TypeProp = 'index' | 'selection' | 'expand';

// interface Input {
// 	el?: "input";
// 	props?: Partial<InputProps>;
// }
// interface Select {
// 	el?: "select";
// 	props?: Partial<typeof ElSelect.__defaults>;
// }

// interface TreeSelect {
// 	el?: "tree-select";
// 	props?: any;
// }

// interface DatePicker {
// 	el?: "date-picker";
// 	props?: any;
// }

// interface TimePicker {
// 	el: "time-picker";
// 	props?: Partial<TimePickerDefaultProps>;
// }

// interface TimeSelect {
// 	el?: "time-select";
// 	props?: Partial<TimeSelectProps>;
// }

// interface Switch {
// 	el?: "switch";
// 	props?: Partial<SwitchProps>;
// }

// 联动
// interface Cascader {
// 	placeholder?: string;
// 	disabled?: boolean; // 是否禁用
// 	clearable?: boolean; // 是否清除按钮
// 	filterable?: boolean; // 是否搜索
// 	"collapse-tags-tooltip"?: boolean; // 当鼠标悬停于折叠标签的文本时，是否显示所有选中的标签。 要使用此属性，collapse-tags属性必须设定为 true
// 	"collapse-tags"?: boolean; // 多选模式下是否折叠Tag
// 	"show-all-levels"?: boolean; // 输入框中是否显示选中值的完整路径
// }

export type BaseSearch = {
	cascader?: Cascader;
	filterDict?: any[]; // 过滤字典中某个值
	type?: string; // 组件类型
	key?: string; // 当搜索项 key 不为 prop 属性时，可通过 key 指定
	order?: number; // 搜索项排序（从大到小）
	span?: number; // 搜索项所占用的列数，默认为1列
	offset?: number; // 搜索字段左侧偏移列数
	defaultValue?: string | number | boolean | any[]; // 搜索项默认值
	keyName?: string[];
} & Partial<Record<BreakPoint, Responsive>>;

export type SearchProps = BaseSearch & (Input | Select | DatePicker | TimePicker | TimeSelect | Switch | TreeSelect | RadioGroup);

export interface ColumnProps<T = any> extends Partial<Omit<TableColumnCtx<T>, 'children' | 'renderHeader' | 'renderCell'>> {
	tag?: boolean; // 是否是标签展示
	isShow?: boolean; // 是否显示在表格当中
	tableType?: string;
	search?: SearchProps | undefined; // 搜索项配置
	enum?: EnumProps[] | ((params?: any) => Promise<any>); // 枚举类型（渲染值的字典）
	isFilterEnum?: boolean; // 当前单元格值是否根据 enum 格式化（示例：enum 只作为搜索项数据）
	fieldNames?: { label: string; value: string }; // 指定 label && value 的 key 值
	headerRender?: (row: ColumnProps) => any; // 自定义表头内容渲染（tsx语法）
	render?: (scope: { row: T }) => any; // 自定义单元格内容渲染（tsx语法）
	changeForm?: ((...args: any[]) => any) | undefined; // 组件change方法
	_children?: ColumnProps<T>[]; // 多级表头
	enumParams?: string | number; // 字典参数
}

export type HeaderBtnsItem = {
	btnName: string; // 按钮名称
	btnIcon: string; // 按钮图标
	btnClick: (params?: any) => void; // 按钮点击事件
	btnType?: string; // 按钮类型
	btnDisabled?: boolean; // 按钮是否禁用
	btnShow?: boolean; // 按钮是否显示
	size?: string;
	style?: any;
};
